\documentclass[12pt]{article}

\usepackage{sbc-template}

\usepackage{graphicx,url}

\usepackage[brazil]{babel}   
\usepackage[utf8]{inputenc}  
\usepackage[utf8]{inputenc} % acentos em português
     
\sloppy

\title{Um modelo de tráfego de automóveis utilizando JASON}
\author{Felipe Tanus, Gustavo Valdez}


\address{Instituto de Informática -- Universidade Federal do Rio Grande do Sul
  (UFRGS)\\
  Caixa Postal 15.064 -- 91.501-970 -- Porto Alegre -- RS -- Brazil
}

\begin{document} 

\maketitle

     
\begin{resumo} 
Esse trabalho visa criar um modelo de tráfego de automóveis baseado em sistemas multiagentes utilizando a ferramenta JASON. Duas abordagens para os agentes serão utilizadas e comparadas: Uma em que os agentes sempre escolhem o menor caminho até o seu destino, e outra colaborativa, onde os carros informam aos carros de trás como está o trafego a sua frente, visando assim um melhor aproveitamento de caminhos alternativos. 
\end{resumo}

\section{Introdução}
Na segunda etapa da cadeira Agentes Autônomos e Sistemas Multiagentes nos foi apresentado uma ferramenta para a modelagem de agentes chamada JASON. Essa ferramenta utiliza o sistema de Belief-Desire-Intention(BDI) para descrever a atuação dos agentes, e o ambiente pode ser programado em Java. Para exercitar a aplicação dessa ferramenta, escolhemos modelar um sistema de tráfego, onde o ambiente é composto de estradas, e os agentes são carros. Todos os agentes, nesse mapa, tem o mesmo objetivo: Chegar em determinado ponto do mapa. Para isso, vamos criar duas abordagens diferentes para os agentes, uma procurando sempre o caminho mais próximo, e outra utilizando troca de mensagens entre os agentes para escolher os melhores caminhos.


\section{Ambiente}
O ambiente do programa foi completamente escrito em java, aproveitando a API que JASON proporciona, que apesar de simples condiz com as necessidades do nosso trabalho. O ambiente estende a classe GridWorldModel, que é disponibilizada na plataforma JASON. Um quadrado da matriz pode ser uma estrada, isso é, um quadrado por onde um agente pode trafegar, ou não ser uma estrada. Note que dois agentes não podem ocupar a mesma posição da matriz ao mesmo tempo, para assim gerar engarrafamentos.
Construimos no total três modelos de estradas, que são intercambeaveis diretamente no código do ambiente, bastando comentar e descomentar seções do código.

\subsection{Crenças}
O ambiente proporciona diversas crenças para os agentes. Segue a lista de crenças com uma breve descrição 

\begin{itemize}
	\item at(crossroad): O agente sempre possui essa crença, que reflete o tipo de superfície que ele se encontra. Pode ser road, em que é no meio de uma estrada, ou crossroad, que representa uma bifucração.
	\item myRoad(road): O agente sempre possui essa crença, que indica em que estrada ele está, ou seja, em que posição do array.
	\item road\_choice(road):  Essa crença está disponivel quando o agente possui mais de uma escolha para se mover. para cada possível escolha, ele tem uma crença diferente dessas, onde road representa a estrada para onde ele pode se mover.
	\item road\_best\_dist(road, dist): O agente possui essa crença sempre que mais de um movimento está disponível. Ele possui uma crença dessas para cada movimento, sendo que road representa uma estrada para que ele possivelmente pode se mover, e dist representa a distância por esse caminho até o seu destino. Quanto menor a distância, mais próximo ele está.
\end{itemize}

\subsection{Ações}
O ambiente disponibiliza uma série de ações que um agente pode tomar. Segue uma lista dessas ações, com uma breve descrição.
\begin{itemize}
\item move: Essa ação representa um movimento simples do carro, que pode ser executada quando ele não tiver nenhuma opção de caminho a tomar, isso é, não estiver em uma bifurcação.
\item goto\_road(road): Essa ação representa um movimento de um carro em que ele escolhe um caminho a seguir. Ele faz sentido quando o carro tem que escolher um caminho em uma bifurcação.
\end{itemize}


\section{Agente Car}
O agente Car é o único agente disponível no sistema. Apesar de ser o único agente, ele possui duas implementações: A de carro "burro" e a de carro "inteligente". O carro burro, para chegar em seu destino, tem como plano principal escolher sempre o menor caminho. Os carros inteligentes, por outro lado, comunicam-se para detectar engarrafamentos, tentando escolher caminhos mais inteligentes.
Ele normalmente é instanciado em grandes quantidades, para gerar tráfego e poder comparar as duas. Note que todos os carros em uma instância do programa devem ter o mesmo tipo. Para trocar o tipo do carro, basta trocar o plano inicial dele diretamente no código.

\subsection{Carro burro}
Quando está em uma encruzilhada, o carro burro sempre tenta escolher o caminho mais perto, analisando suas crenças road\_best\_choice. Uma vez escolhido, segue por esse caminho. Ele não faz nenhuma análise do tráfego, buscando minimizar a distância percorrida, e não o tempo de deslocamento.

\subsection{Carro inteligente}
O carro inteligente


\section{Conclusão}
Com esse trabalho, aumentamos a nossa prática de modelagem de sistemas multiagentes, em especial utilizando JASON, ferramenta que nos era desconhecida no início da disciplina. Acreditamos que obtivemos um bom crescimento em relação asistemas multiagentes na cadeira em suas duas partes. Tivemos a oportunidade de programar agentes em Java, uma linguagem de programação conhecida, e JASON, um framework específico para a programação de agentes, e analisar o quanto nos é benéfico utilizar um framework pŕoprio para essa tarefa.

\end{document}
